package threadTest.collectionTest;

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;

/**
 * 功能描述: 集合测试 Set 并发编程
 * 2024/02/22
 * <p>
 * ZhangYi
 */
public class SetTest {
    public static void main(String[] args){
        // 集合不安全
        //Set<Integer> sets = new HashSet<>(); // 会引发 java.util.ConcurrentModificationException 异常

        // 集合安全
        //Set<Integer> sets = Collections.synchronizedSet(new HashSet<>());  //Collections.synchronizedSet
        //CopyOnWriteArrayList（简称COWAL）是Java中并发编程的线程安全集合类，它是ArrayList的线程安全版本。其原理主要体现在“写时复制”（Copy-On-Write, COW）策略上：
        CopyOnWriteArraySet<Integer> sets = new CopyOnWriteArraySet<>();  // CopyOnWriteArraySet


        for (int index = 0; index < 1000; index++) {
            final Integer temp = index;
            new Thread(()->{
                sets.add(temp);
            },String.valueOf(index)).start();
        }


        System.out.println(sets);
    }
}
